#ifndef SAY_SOMETHING_HPP_
#define SAY_SOMETHING_HPP_

#include <behaviortree_cpp/bt_factory.h>
#include <iostream>

/**
 * @brief  SyncActionNode 表示 同步节点，也就是：执行完一次 tick()，必须马上返回 SUCCESS 或 FAILURE，不允许是 RUNNING。
 */
class SaySomething : public BT::SyncActionNode
{
private:
    /* data */
public:
    SaySomething(const std::string& name, const BT::NodeConfiguration& config) : BT::SyncActionNode(name, config)
    {

    }

    ~SaySomething()
    {

    }

    static BT::PortsList providedPorts()
    {
        return { BT::InputPort<std::string>("message") };
    }

    BT::NodeStatus tick() override
    {
        auto msg = getInput<std::string>("message");
        if (!msg)
        {
            throw BT::RuntimeError("missing parameter [message]");
        }
        std::cout << "say: " << msg.value() << std::endl;
        return BT::NodeStatus::SUCCESS;
    }
};


#endif